package com.neko.seed;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.*;
import com.baomidou.mybatisplus.generator.AutoGenerator;
public class CodeGenerator {

  public static void main(String[] args) {

      // 1、创建代码生成器
      AutoGenerator mpg = new AutoGenerator();

      // 2、全局配置
      GlobalConfig gc = new GlobalConfig();
      String projectPath = System.getProperty("user.dir");
      // 此处建议写项目/src/main/java源代码的绝对路径
      gc.setOutputDir(projectPath + "/examples/java-server/src/main/java");
      // 生成注释时的作者
      gc.setAuthor("Holly Liu");
      //生成后是否打开资源管理器
      gc.setOpen(false);
      gc.setFileOverride(false); //重新生成时文件是否覆盖
      gc.setServiceName("%sService");	//去掉Service接口的首字母I
      gc.setIdType(IdType.ID_WORKER_STR); //主键策略
      gc.setDateType(DateType.ONLY_DATE); //定义生成的实体类中日期类型
      // 如果开启Swagger,要引入相应的包
      gc.setSwagger2(true); //开启Swagger2模式

      mpg.setGlobalConfig(gc);

      // 3、数据源配置
      DataSourceConfig dsc = new DataSourceConfig();
      dsc.setUrl("jdbc:mysql://127.0.0.1:3306/demo?serverTimezone=GMT-8");
      dsc.setDriverName("com.mysql.cj.jdbc.Driver");
      dsc.setUsername("root");
      dsc.setPassword("12345678");
      dsc.setDbType(DbType.MYSQL);
      mpg.setDataSource(dsc);

      // 4、包配置
      PackageConfig pc = new PackageConfig();
      // 此处要注意：parent + moduleName 为包的名字，在这个包下，创建对应的controller...
      pc.setParent("com.neko.seed");
      pc.setModuleName("api"); //模块名
      pc.setController("controller");
      pc.setEntity("entity");
      pc.setService("service");
      pc.setMapper("mapper");
      mpg.setPackageInfo(pc);

      // 5、策略配置
      StrategyConfig strategy = new StrategyConfig();
      // 数据库表映射到实体的命名策略,驼峰命名法
      strategy.setNaming(NamingStrategy.underline_to_camel);
      strategy.setTablePrefix("t_");

      //数据库表字段映射到实体的命名策略
      strategy.setColumnNaming(NamingStrategy.underline_to_camel);
      strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

      strategy.setRestControllerStyle(true); //restful api风格控制器
      strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
      strategy.setSuperEntityClass("com.neko.seed.api.entity.BasePo");
      strategy.setSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time", "deleted");

      mpg.setStrategy(strategy);

      // 6、执行
      mpg.execute();
  }
}